//
//  WBStatusListViewModel.swift
//  weibo
//
//  Created by iobit on 2017/06/29.
//  Copyright © 2017 zhuxu. All rights reserved.
//

import Foundation

// 微博数据列表视图模型
// 上拉刷新最大尝试次数
private let maxPullupTryTimes = 3

class WBStatusListViewModel {
    
    // 微博模型数组懒加载
    lazy var statusList = [WBStatusViewModel]()
    // 上拉刷新错误次数
    var pullupErrorTimes = 0
    
    func loadStatus(pullup: Bool, completion: @escaping (_ isSuccess :Bool, _ shouldRefresh: Bool)->()) {
        // 判断是否是上拉刷新，同时检查错误次数
        if pullup && pullupErrorTimes > maxPullupTryTimes {
            completion(true, false)
            return
        }
        
        // 取出微博数组中第一条和最后条微博
        let since_id = pullup ? 0 : (statusList.first?.status.id ?? 0)
        let max_id = !pullup ? 0 : (statusList.last?.status.id ?? 0)

        // 发起网络请求，返回字典数组list
        WBNetWorkManager.shared.statusList(since_id: since_id, max_id: max_id) { (list, isSuccess) in
            // 网络请求失败直接返回
            if !isSuccess {
                completion(false, false)
                return
            }
            var array = [WBStatusViewModel]()
            // 遍历字典数组 字典转 模型 再转 视图模型
            for dict in list {
                print(dict["pic_url"])
                let status = WBStatus()
                
                // 使用字典设置模型数值
                status.yy_modelSet(with: dict)
                
                // 使用微博模型创建微博视图模型
                let viewModel = WBStatusViewModel(model: status)
                
                array.append(viewModel)
            }
            
            print("刷新到了\(array.count)条数据---\(array)")
            
            // 拼接数据
            if pullup {
                self.statusList += array
            }else {
                self.statusList = array + self.statusList
            }

            // 判断上拉刷新的数据
            if pullup && array.count == 0 {
                self.pullupErrorTimes += 1
                completion(isSuccess, false)
            }else {
                completion(isSuccess, true)
            }

        }
    }
}
